# 定时任务
from collections import OrderedDict

from django.template import loader

from contents.models import ContentCategory
from goods.models import GoodsChannel





def get_categories():
    """
    # 商品频道及分类菜单
ordered_dict = {
    1: {  # 第1组
        'channels': [{'id':, 'name':, 'url':}, {}, {}...],  # 一级类别
        'sub_cats': [
            {'id':, 'name':, 'sub_cats': [{}, {}, {}...]},  # 二级类别
            {'id':, 'name':, 'sub_cats': [{}, {}, {}...]},  # 二级类别
        ]
    },
    2: {'channels': [], 'sub_cats': []}  # 第2组
    3: {'channels': [], 'sub_cats': []}  # 第3组
}
    :return:
    """
    # 拼装满足界面显示需求的数据格式： 商品频道及分类菜单

    ordered_dict = OrderedDict()  # 创建一个有序的字典
    # 查询所有的(一级类别，url)
    channels = GoodsChannel.objects.order_by('group_id', 'sequence')
    for channel in channels:  #　遍历(一级类别)
        group_id = channel.group_id  # 第n组
        # group_id 表示频道(组)的id
        # 如果频道(组)不在这个字典中　则会创建一个新的频道去新增一级二级三级类别数据
        if group_id not in ordered_dict:
            group_dict = {'channels': [], 'sub_cats': []} # 创建包含所有级别的类别的字典　所有都在里面
            # 分组　把第一种一级类别的分为一个频道一组　{'channels': [], 'sub_cats': []}  # 第2组
            # 因为组名频道不同所以每次循环添加数据的时候都不会出现数据错乱添加的情况
            ordered_dict[group_id] = group_dict
        else: # 如果频道(组)在这个字典中，则给这个频道(组)继续添加数据
            group_dict = ordered_dict[group_id]

        # 一级类别:  {'id':, 'name':, 'url':}
        cat1 = channel.category  # 第一个一级类别
        cat1.url = channel.url  # 类别对象新增url属性
        group_dict['channels'].append(cat1)  # 把第一个一级类别加到所有级别的类别字典中

        # 二级类别: {'id':, 'name':, 'sub_cats': [{}, {}, {}...]}
        # cat1.goodscategory_set.all(): 取出一级类别下的二级类别
        for cat2 in cat1.goodscategory_set.all():
            cat2.sub_cats = []  # 对象新增sub_cats属性
            # 三级类别
            for cat3 in cat2.goodscategory_set.all():
                cat2.sub_cats.append(cat3)
            group_dict['sub_cats'].append(cat2)  # 添加二级类别
    return ordered_dict


def generate_static_index_html():
    """生成静态的首页"""
    print("测试看是否生成静态页面")
    # 1. 获取类别和频道数据
    categories = get_categories()

    # 2. 获取广告内容（轮播图，快讯，3个楼层数据）
    contents = {}
    content_categories = ContentCategory.objects.all() # 获取所有广告类别
    for cat in content_categories:
        # 一查多语法查询关系: cat.content_set.all()　类名小写下划线set　获取广告类别下的内容
        # 查询一个类别下所有的广告　这里取到的是轮播图这个类别
        contents[cat.key] = cat.content_set.all().filter(
            # sequence:根据权重值做广告排序order_by　　status=True　上线
            status=True).order_by('sequence')

    # django模板要显示的字典数据
    context = { # mysql查询出来的数据
        'categories':categories,
        'contents':contents
    }
    # 3. 使用django模板语法渲染模板,得到静态的首页内容
    # 获取模板对象
    template = loader.get_template('index.html')
    # 渲染得到的数据库的数据到模板　得到静态页面的内容
    html_str = template.render(context)
    # 4. 把首页内容写到 front_end_pc/indexes.html 模板文件中  生成index.html
    # 再把得到的静态内容写到index.html模板中，这样句不用在访问首页的时候去查数据库了　提前渲染好了
    file_path = '/home/python/PycharmProjects/meiduo/front_end_pc/indexes.html'
    with open(file_path,'w') as file:
        file.write(html_str)   # 把要写的内容写进去




